package com.mars.admin.modules.activity.service;

import com.mars.admin.common.request.activity.ActivityRequest;
import com.mars.admin.modules.activity.entity.Activity;
import com.mars.admin.modules.activity.vo.ActivityVO;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;

import java.util.List;

/**
 * 活动服务接口
 *
 * @author Mars
 * @version 1.0
 * @date 2025-01-07
 */
public interface IActivityService extends IService<Activity> {

    /**
     * 分页查询活动
     *
     * @param page    分页参数
     * @param request 查询条件
     * @return 分页结果
     */
    Page<Activity> pageActivity(Page<Activity> page, ActivityRequest request);

    /**
     * 根据id获取活动详情
     * @param id
     * @return
     */
    ActivityVO getActivityById(Long id);

    /**
     * 根据分类ID获取活动列表
     *
     * @param categoryId 分类ID
     * @param status     活动状态
     * @return 活动列表
     */
    List<ActivityVO> getActivitiesByCategoryId(Long categoryId, Integer status);

    /**
     * 获取推荐活动列表
     *
     * @param limit 限制数量
     * @return 推荐活动列表
     */
    List<ActivityVO> getRecommendActivities(Integer limit);

    /**
     * 获取热门活动列表
     *
     * @param limit 限制数量
     * @return 热门活动列表
     */
    List<Activity> getHotActivities(Integer limit);

    /**
     * 获取置顶活动列表
     *
     * @param limit 限制数量
     * @return 置顶活动列表
     */
    List<Activity> getTopActivities(Integer limit);

    /**
     * 根据用户ID获取发布的活动
     *
     * @param userId 用户ID
     * @param status 活动状态
     * @return 活动列表
     */
    List<Activity> getActivitiesByUserId(Long userId, Integer status);

    /**
     * 更新活动浏览量
     *
     * @param activityId 活动ID
     */
    void updateViewCount(Long activityId);

    /**
     * 更新活动点赞数
     *
     * @param activityId 活动ID
     * @param increment  增量（正数增加，负数减少）
     */
    void updateLikeCount(Long activityId, Integer increment);

    /**
     * 更新活动评论数
     *
     * @param activityId 活动ID
     * @param increment  增量（正数增加，负数减少）
     */
    void updateCommentCount(Long activityId, Integer increment);

    /**
     * 更新活动收藏数
     *
     * @param activityId 活动ID
     * @param increment  增量（正数增加，负数减少）
     */
    void updateCollectCount(Long activityId, Integer increment);

    /**
     * 更新活动分享数
     *
     * @param activityId 活动ID
     */
    void updateShareCount(Long activityId);

    /**
     * 审核活动
     *
     * @param activityId  活动ID
     * @param auditStatus 审核状态
     * @param auditReason 审核原因
     * @param auditUserId 审核人ID
     */
    void auditActivity(Long activityId, Integer auditStatus, String auditReason, Long auditUserId);

    /**
     * 发布活动
     *
     * @param request request
     * @return boolean
     */
    boolean publish(ActivityRequest request);

    /**
     * 删除活动(后台)
     * @param id
     * @return
     */
    boolean deleteById(Long id);
    /**
     * 获取当前用户发布的活动数量
     *
     * @param userId 用户id
     * @return 数量
     */
    long countMyActivities(Long userId);
}
